package cluster

import (
	"fmt"
	"xc/app/common"
	"xc/app/zookeeper"
)

func welcome() {
	fmt.Println("===================================")
	fmt.Println("=                                 =")
	fmt.Println("=       Welcome to xconsumer      =")
	fmt.Println("=                                 =")
	fmt.Println("===================================")
}

func init() {
	welcome()

	initData()

	InitCluster()

	InitTask()

	InitNodes()

	InitNode()

	InitNodeTask()
}

func initData() {
	common.ConfigNew("app")

	common.LogNew()

	zookeeper.New()
}

// Run 集群开始执行
// 必须要在集群成功启动没有问题后，才能启动其他服务
// 1.cluster
// 2.http
func Run() {
	// leader选举
	nodes.LeaderElection()

	// 节点监听
	go NodesWatch()

	// 任务监听
	go TaskWatch()

	// 节点任务监听
	go NodeTaskWatch()

	// 开始工作
	nodes.DoWork()

	// 定时处理任务，防止监听未收到通知的问题
	worker.doWorkTicker()

	for {
		// 保持程序运行，不退出
	}
}
